package com.eighteengray.commonutillibrary;

import android.content.Context;
import android.os.Environment;
import android.os.StatFs;
import java.io.File;


/**
 * SDCard相关工具类
 */
public class SDCardUtils
{
    //SDCard
    /**
     * 判断SDCard是否可用
     */
    public static boolean isSDCardEnable()
    {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }


    /**
     * 获取SD卡路径
     */
    public static String getSDCardPath()
    {
        return Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
    }


    /**
     * 获取SD卡的剩余容量 单位byte
     */
    public static long getFreeSizeAll()
    {
        if (isSDCardEnable())
        {
            StatFs stat = new StatFs(getSDCardPath());
            // 获取空闲的数据块的数量
            long availableBlocks = (long) stat.getAvailableBlocks() - 4;
            // 获取单个数据块的大小（byte）
            long freeBlocks = stat.getAvailableBlocks();
            return freeBlocks * availableBlocks;
        }
        return 0;
    }


    /**
     * 获取指定路径所在空间的剩余可用容量字节数，单位byte
     */
    public static long getFreeSizeByPath(String filePath)
    {
        // 如果是sd卡的下的路径，则获取sd卡可用容量
        if (filePath.startsWith(getSDCardPath()))
        {
            filePath = getSDCardPath();
        } else
        {// 如果是内部存储的路径，则获取内存存储的可用容量
            filePath = Environment.getDataDirectory().getAbsolutePath();
        }
        StatFs stat = new StatFs(filePath);
        long availableBlocks = (long) stat.getAvailableBlocks() - 4;
        return stat.getBlockSize() * availableBlocks;
    }


    /**
     * 调用该方法会返回应用程序的外部文件系统（Environment.getExternalStorageDirectory()）目录的绝对路径，它是用来存放应用的缓存文件，
     * 它和getCacheDir目录一样，目录下的文件都会在程序被卸载的时候被清除掉。
     */
    public static File getSDCardCache(Context context)
    {
        if (isSDCardEnable())
        {
            return context.getExternalCacheDir();
        }
        return null;
    }


    //系统存储
    /**
     * 获取系统存储路径
     */
    public static String getRootDirectoryPath()
    {
        return Environment.getRootDirectory().getAbsolutePath();
    }


    /**
     * 返回通过Context.openFileOutput()创建和存储的文件系统的绝对路径，应用程序文件，
     * 这些文件会在程序被卸载的时候全部删掉。
     */
    public static File getAppFile(Context context)
    {
        return context.getFilesDir();
    }


    /**
     * 返回应用程序指定的缓存目录，这些文件在设备内存不足时会优先被删除掉，
     * 所以存放在这里的文件是没有任何保障的，可能会随时丢掉。
     */
    public static File getAppCache(Context context)
    {
        return context.getCacheDir();
    }


    /**
     * 这是一个可以存放你自己应用程序自定义的文件，你可以通过该方法返回的File实例来创建或者访问这个目录，
     * 注意该目录下的文件只有你自己的程序可以访问。
     */
    public static File getAppDir(Context context, String path)
    {
        return context.getDir(path, 0);
    }

}
